/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fbv.tcc.chart;

import fbv.tcc.classes.PontoRadiacao;
import fbv.tcc.modelo.ModeloFisico;
import fbv.tcc.utils.Utils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 *
 * @author Casa
 */
public class GraficoRadiacao {

    private String caminhoGraficos = "C:\\Users\\Victor\\Dropbox\\FBV\\TCC\\Pasta sem titulo\\Graficos\\";
    //private ModeloFisico modelo = new ModeloFisico();
    private ArrayList<Double> radiacaoModeloFisico;
    Utils h = new Utils();
    ArrayList<Double> horarios = new ArrayList<Double>();    
    ModeloFisico modelo = new ModeloFisico();

    public void geraGraficos(ArrayList<PontoRadiacao> pontos) {


       horarios.addAll(h.hora());



        //lista que contem as datas separadas e que será armazenada no hashmap para cada dia juliano
        ArrayList<PontoRadiacao> pontosSeparados = new ArrayList<PontoRadiacao>();

        //lista contendo as datas completas visitadas
        ArrayList<String> pontosVisitados = new ArrayList<String>();

        //lista contendo os dias julianos que já visitei
        ArrayList<String> diaJulianoVisitado = new ArrayList<String>();

        String diaJulianoCorrente;

        for (int i = 0; i < pontos.size(); i++) {

            //se o dia ainda não foi visitado...            
            if (!pontosVisitados.contains(pontos.get(i).getData().toString())) {

                //adiciona o dia Juliano atual para a lista de visitados
                diaJulianoCorrente = pontos.get(i).getDia().toString();
                diaJulianoVisitado.add(diaJulianoCorrente);

                System.out.println("DiaJ: " + diaJulianoCorrente);

                for (int j = 0; j < pontos.size(); j++) {

                    if (!pontosVisitados.contains(pontos.get(j).getData().toString())) {

                        // se o dia juliano atual existe na lista de visitados..
                        if (diaJulianoVisitado.indexOf(String.valueOf(pontos.get(j).getDia())) != -1) {


                            //adiciona aqui ponto a ponto na lista
                            pontosSeparados.add(pontos.get(j));

                            //marca esse ponto como visitado
                            pontosVisitados.add(pontos.get(j).getData().toString());

                            //System.out.println(pontos.get(j));

                        } else {
                            continue;
                        }
                    } else {
                        continue;
                    }
                }


                renderizarGraficoPasta(pontosSeparados, Integer.parseInt(diaJulianoCorrente), 34, 8);

                pontosSeparados.clear();

            }

        }
    }

    public void renderizarGraficoPasta(ArrayList<PontoRadiacao> serie, int diaJ, double lon, double lat) {
       
        radiacaoModeloFisico = modelo.calculaRadiacaoET(diaJ, lon, lat, horarios);

        //serie com radiações da planilha
        XYSeries series1 = new XYSeries("Medido");

        for (int i = 0; i < serie.size(); i++) {
            //double dx = Double.parseDouble(al2.get(i));	
            double dy = serie.get(i).getRadiacao();
            series1.add(i, dy);
        }

        XYSeries series2 = new XYSeries("Céu Claro");

        for (int i = 0; i < radiacaoModeloFisico.size(); i++) {
            //double dx = Double.parseDouble(al2.get(i));	
            double df = radiacaoModeloFisico.get(i);
            series2.add(i, df);


        }

        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series1);
        dataset.addSeries(series2);

        JFreeChart chart = ChartFactory.createXYLineChart(
                "Irradiância Solar Total", // Title
                "Tempo", // x-axis Label
                "Radiação", // y-axis Label
                dataset, // Dataset
                PlotOrientation.VERTICAL, // Plot Orientation
                true, // Show Legend
                true, // Use tooltips
                false // Configure chart to generate URLs?
                );
        try {
            ChartUtilities.saveChartAsJPEG(new File(caminhoGraficos + serie.get(0).getAno() + serie.get(0).getDia() + ".jpg"), chart, 500, 300);
        } catch (IOException e) {
            System.err.println(e.toString());
        }
    }
}
